/*
 * Partie gauche de l'interface, qui s'occupe d'afficher les information sur
 * la pièce selectionnée, permet également de gerer la temperature des pieces
 */

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

/**
 *
 * @author Nicolas
 */
public class MenuPiece extends JPanel implements ActionListener, ListSelectionListener {

	private JPanel panPrincipal;
	private JPanel panTemperature;
	private JPanel panPresence;
	private JPanel panListeObjet;
	private JPanel panTempVoulu;

	private JLabel textInfo;
	private JLabel textTemperature;
	private JLabel textPresence;
	private JLabel textTempVoulu;

	private JLabel valTemperature;
	private JLabel valPresence;
	private JLabel valTempVoulu;

	private JButton bouton1;

	private JList listeObjet;
	private JScrollPane listScroller;

	private Glados glados;
	private Maison maison;

	private int numPiece = 0;
	private Timer t;

	MenuPiece(Glados glados, Maison maison) {
		this.glados = glados;
		this.maison = maison;
		panPrincipal = new JPanel(new GridLayout(6, 0, 5, 20));
		panPrincipal.setPreferredSize(new Dimension(250,400));
		panTemperature = new JPanel(new BorderLayout());
		panPresence = new JPanel(new BorderLayout());
		panListeObjet = new JPanel(new BorderLayout());

		panTempVoulu = new JPanel(new BorderLayout());

		textInfo = new JLabel("                      Informations de la pièce");
		textTemperature = new JLabel("Température : ");
		textPresence = new JLabel("Présence : ");
		textTempVoulu = new JLabel("Température souhaitée : ");
		valTemperature = new JLabel(Float.toString(maison.getListePiece().get(numPiece).getTemperaturePiece()));
		valPresence = new JLabel(Boolean.toString(maison.getListePiece().get(0).getPresence()));
		valTempVoulu = new JLabel(Float.toString(maison.getListePiece().get(numPiece).getTemperatureVoulu()));

		bouton1 = new JButton("Modifier T° souhaitée");
		bouton1.addActionListener(this);


		this.panTemperature.add(textTemperature, BorderLayout.WEST);
		this.panTemperature.add(valTemperature, BorderLayout.EAST);
		this.panPresence.add(textPresence, BorderLayout.WEST);
		this.panPresence.add(valPresence, BorderLayout.EAST);
		this.panTempVoulu.add(textTempVoulu, BorderLayout.WEST);
		this.panTempVoulu.add(valTempVoulu, BorderLayout.EAST);


		this.panPrincipal.add(textInfo);
		this.panPrincipal.add(panPresence);
		this.panPrincipal.add(panTemperature);
		this.panPrincipal.add(panTempVoulu);
		this.panPrincipal.add(bouton1);
		afficherObjet();

		this.add(panPrincipal);
	}

	/**
	 * gere le bouton qui permet de modifier la température de la piece selectionnée
	 * @param e
	 */
	public void actionPerformed(ActionEvent e) {
		if ((e.getSource().equals(bouton1))) {
			System.out.println("fait apparaitre une nouvelle fenetre");
			String[] temp = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17",
					"18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35"};
			Object nom = JOptionPane.showInputDialog(
					null,
					"Quel temperature voulez vous dans la piece ?",
					"",
					JOptionPane.QUESTION_MESSAGE,
					null,
					temp,
					temp[0]);

			String temporaire = ((String) (nom));

			System.out.println(maison.getListePiece().get(numPiece));
			System.out.println(numPiece);

			maison.getListePiece().get(numPiece).setTemperatureVoulu(Integer.parseInt(temporaire));               
			valTempVoulu.setText((String) (nom));
			t = new Timer();
			t.schedule(new MonAction(),0, 1*1000);

		}
	}

	//methode qui selectionne la piece et met à jours les variables des pieces selectionnées.
	public void selectionnerPiece(int numPiece) {
		this.numPiece = numPiece;

		valTempVoulu.setText(Float.toString(maison.getListePiece().get(numPiece).getTemperatureVoulu()).concat("°C"));
		valPresence.setText(Boolean.toString(maison.getListePiece().get(numPiece).getPresence()));
		valTemperature.setText(Float.toString(maison.getListePiece().get(numPiece).getTemperaturePiece()));

	}

	public void modifierPresence(int numPiece) {

		if (maison.getListePiece().get(numPiece).getPresence()) {
			maison.getListePiece().get(numPiece).setPresence(false);
		} else {
			maison.getListePiece().get(numPiece).setPresence(true);
		}
	}

	public void afficherObjet() {

		int i = 0;
		Object tab[] = new Object[maison.getListePiece().get(numPiece).getListObjet().size()];
		for (Objet objet : maison.getListePiece().get(numPiece).getListObjet().values()) {
			tab[i] = objet;
			i++;
		}
		listeObjet = new JList(tab);
		listeObjet.addListSelectionListener(this);
		listeObjet.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
		listeObjet.setLayoutOrientation(JList.HORIZONTAL_WRAP);
		listeObjet.setVisibleRowCount(-1);

		listScroller = new JScrollPane(listeObjet);
		listScroller.setPreferredSize(new Dimension(250, 80));

		panListeObjet.add(listScroller);
		panListeObjet.setPreferredSize(new Dimension(50, 50));
		panListeObjet.validate();
		panListeObjet.repaint();

		this.panPrincipal.add(panListeObjet);

	}

	public void changerList(int numPiece) {

		System.out.println(this.numPiece + "numpiece");
		int i = 0;

		panListeObjet.remove(listScroller);
		listScroller.remove(listeObjet);

		Object tab[] = new Object[maison.getListePiece().get(numPiece).getListObjet().size()];
		for (Objet objet : maison.getListePiece().get(numPiece).getListObjet().values()) {
			tab[i] = objet;
			i++;
		}

		listeObjet = new JList(tab);
		listeObjet.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
		listeObjet.setLayoutOrientation(JList.HORIZONTAL_WRAP);
		listeObjet.setVisibleRowCount(-1);
		listeObjet.addListSelectionListener(this);

		listScroller = new JScrollPane(listeObjet);

		panListeObjet.add(listScroller);

		panListeObjet.repaint();



	}

	@Override
	// non utilisé pour le moment
	public void valueChanged(ListSelectionEvent lse) {


		//        System.out.println("-------------");
		//        System.out.println(listeObjet.getSelectedValue());
		//        System.out.println(listeObjet.getSelectedIndex());
		//        System.out.println("-------------------");

	}

	// non utilisé pour le moment
	public void lockerObjet(int numObjet){
		maison.getListePiece().get(numPiece).getListObjet().get(ui);

	}


	// thread qui met à jour la temperature
	class MonAction extends TimerTask {
		private int numPieceReel;

		MonAction(){
			this.numPieceReel = numPiece;               
		}            
		public void run(){
			if(numPieceReel == numPiece){
				valTemperature.setText(Float.toString(maison.getListePiece().get(numPiece).getTemperaturePiece()));

				if(maison.getListePiece().get(numPiece).getTemperatureVoulu() == maison.getListePiece().get(numPiece).getTemperaturePiece()){
					t.cancel();
				}
			}
		}            
	}      

	public int getPiece(){
		return numPiece;
	}
}